<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>深入理解Java虚拟机</title>
</head>
<body>
<div data-v-a6a58a5e="" class="content-list">
    <div data-v-a6a58a5e="" class="contentlistwrap">
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">开篇词 | 为什么我们要学习Java虚拟机？</h2>
                <div class="article-item-hd"><i class="iconfont article-item-viewed">
                    
                </i> <span class="article-item-time">2018-07-16</span></div>
                <img src="https://static001.geekbang.org/resource/image/f7/17/f7f927e2ff234c070424040da2b4ab17.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    我希望借由这个专栏，帮助你理解Java虚拟机的运行机制，掌握诊断手法和调优方式。最重要的，是激发你学习技术的...</p>
                <div class="article-item-more"><a href="/column/article/11074" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/11074">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">01 | Java代码是怎么运行的？</h2>
                <div class="article-item-hd"><i class="iconfont article-item-viewed">
                    
                </i> <span class="article-item-time">2018-07-20</span></div>
                <img src="https://static001.geekbang.org/resource/image/9a/ac/9a15a3bb8de2b97650bf14ff310e39ac.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">作为一名 Java 程序员，你应该知道，Java 代码有很多不同的运行方式。</p>
                <div class="article-item-more"><a href="/column/article/11289" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/11289">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">02 | Java的基本类型</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-07-23</span></div>
                <img src="https://static001.geekbang.org/resource/image/58/d9/58cad5fc07b171fb6f6b978fcd5241d9.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    Java引进了八个基本类型，来支持数值计算。这么做的原因主要是工程上的考虑，因为使用基本类型，能够在执行效率...</p>
                <div class="article-item-more"><a href="/column/article/11503" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/11503">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">03 | Java虚拟机是如何加载Java类的?</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-07-25</span></div>
                <img src="https://static001.geekbang.org/resource/image/60/e3/60fcea1428d3c7d0af45be8bc0a40ee3.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    无论是直接生成的数组类，还是加载的类，Java虚拟机都需要对其进行链接和初始化。接下来，我会详细给你介绍一下...</p>
                <div class="article-item-more"><a href="/column/article/11523" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/11523">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">04 | JVM是如何执行方法调用的？（上）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-07-27</span></div>
                <img src="https://static001.geekbang.org/resource/image/f7/00/f7343473fc0c358ded5b037189aa8d00.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    在Java中，方法存在重载以及重写的概念，重载指的是方法名相同而参数类型不相同的方法之间的关系，重写指的是方...</p>
                <div class="article-item-more"><a href="/column/article/11539" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/11539">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">05 | JVM是如何执行方法调用的？（下）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-07-30</span></div>
                <img src="https://static001.geekbang.org/resource/image/d0/a9/d04d3fdd78caf19bca1787f789bbdea9.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">虚方法调用有两种指令。如果这两种指令所声明的目标方法被标记为final，那么Java虚拟机会采用静态绑定。</p>
                <div class="article-item-more"><a href="/column/article/12098" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/12098">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">06 | JVM是如何处理异常的？</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-01</span></div>
                <img src="https://static001.geekbang.org/resource/image/26/82/26f97c013591f90d77fd5d7715a47582.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">异常处理的两大组成要素是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。</p>
                <div class="article-item-more"><a href="/column/article/12134" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/12134">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">【工具篇】 常用工具介绍</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-03</span></div>
                <img src="https://static001.geekbang.org/resource/image/64/15/64465d2cb3318fd52c3dae90e7394015.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">在前面的文章中，我曾使用了不少工具来辅助讲解，那么今天我便统一做一次具体的介绍。</p>
                <div class="article-item-more"><a href="/column/article/12423" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/12423">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">07 | JVM是如何实现反射的？</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-06</span></div>
                <img src="https://static001.geekbang.org/resource/image/4f/0e/4f25cb0a83efe4097168eee9ad24170e.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">反射是Java语言中一个相当重要的特性，它允许正在运行的Java程序观测，甚至是修改程序的动态行为。</p>
                <div class="article-item-more"><a href="/column/article/12192" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/12192">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">08 | JVM是怎么实现invokedynamic的？（上）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-08</span></div>
                <img src="https://static001.geekbang.org/resource/image/d0/21/d01b957f98cbc13fbd9f7675c702cf21.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">方法句柄是一个强类型的、能够被直接执行的引用。它仅关心所指向方法的参数类型以及返回类型，而不关心方法所在...</p>
                <div class="article-item-more"><a href="/column/article/12564" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/12564">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">09 | JVM是怎么实现invokedynamic的？（下）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-10</span></div>
                <img src="https://static001.geekbang.org/resource/image/66/0d/669bb4c80fbee3c69aee0316c37ed90d.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    今天，我便来正式地介绍invokedynamic指令，讲讲它是如何生成调用点，并且允许应用程序自己决定链接至哪一个方...</p>
                <div class="article-item-more"><a href="/column/article/12574" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/12574">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">10 | Java对象的内存布局</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-13</span></div>
                <img src="https://static001.geekbang.org/resource/image/8e/92/8eda743c128a33fe446358b740978792.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    常见的new语句会被编译为new指令，以及对构造器的调用。每个类的构造器皆会直接或者间接调用父类的构造器，并且...</p>
                <div class="article-item-more"><a href="/column/article/13081" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/13081">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">11 | 垃圾回收（上）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-15</span></div>
                <img src="https://static001.geekbang.org/resource/image/52/c3/52ff1795756ef8a2a2e57df6d34420c3.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">Java虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象。它从一系列GC
                    Roots出发，边标记边探索所有被...</p>
                <div class="article-item-more"><a href="/column/article/13091" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/13091">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">12 | 垃圾回收（下）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-17</span></div>
                <img src="https://static001.geekbang.org/resource/image/b8/67/b88dfa407127f119d743d5a8d4881567.jpeg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">Java虚拟机将堆分为新生代和老年代，并且对不同代采用不同的垃圾回收算法。</p>
                <div class="article-item-more"><a href="/column/article/13137" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/13137">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">13 | Java内存模型</h2>
                <div class="article-item-hd"><i class="iconfont article-item-viewed">
                    
                </i> <span class="article-item-time">2018-08-20</span></div>
                <img src="https://static001.geekbang.org/resource/image/56/1f/563f86ba13dcd41bdbcca1591182fd1f.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    Java内存模型通过定义了一系列的happens-before操作，让应用程序开发者能够轻易地表达不同线程的操作之间的内...</p>
                <div class="article-item-more"><a href="/column/article/13484" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/13484">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">14 | Java虚拟机是怎么实现synchronized的？</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-22</span></div>
                <img src="https://static001.geekbang.org/resource/image/24/01/24c2733f6cb363952b2fb1d7607f8301.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">Java虚拟机中synchronized关键字的实现，按照代价由高至低可分为重量级锁、轻量级锁和偏向锁三种。</p>
                <div class="article-item-more"><a href="/column/article/13530" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/13530">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">15 | Java语法糖与Java编译器</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-24</span></div>
                <img src="https://static001.geekbang.org/resource/image/41/58/41fa3e1980c19c1acb310e5e2b00f558.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">Java编译器将选取该泛型所能指代的所有类中层次最高的那个，作为替换泛型的具体类。</p>
                <div class="article-item-more"><a href="/column/article/13781" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/13781">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">16 | 即时编译（上）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-27</span></div>
                <img src="https://static001.geekbang.org/resource/image/5e/fa/5e1a093b44690db48866a72778f245fa.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">即时编译是由方法调用计数器和循环回边计数器触发的。在使用分层编译的情况下，触发编译的阈值是根据当前待编译...</p>
                <div class="article-item-more"><a href="/column/article/14061" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/14061">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">17 | 即时编译（下）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-29</span></div>
                <img src="https://static001.geekbang.org/resource/image/2c/5e/2c716b1c57ccf6fcdc00e39620c1fc5e.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">今天我会介绍Java虚拟机的profiling以及基于所收集的数据的优化和去优化。</p>
                <div class="article-item-more"><a href="/column/article/14070" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/14070">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">18 | 即时编译器的中间表达形式</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-08-31</span></div>
                <img src="https://static001.geekbang.org/resource/image/61/87/613b6b983449620bc771dc9bc9689387.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">即时编译器将所输入的Java字节码转换成SSA IR，以便更好地进行优化。</p>
                <div class="article-item-more"><a href="/column/article/14270" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/14270">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">19 | Java字节码（基础篇）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-03</span></div>
                <img src="https://static001.geekbang.org/resource/image/70/3c/70da5bcd822f579b8fc705743d7f883c.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    Java方法的栈桢分为操作数栈和局部变量区。通常来说，程序需要将变量从局部变量区加载至操作数栈中，进行一番运...</p>
                <div class="article-item-more"><a href="/column/article/14794" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/14794">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">20 | 方法内联（上）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-05</span></div>
                <img src="https://static001.geekbang.org/resource/image/b1/cd/b111682f0a93feefa54d6c121123adcd.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">方法内联是指，在编译过程中，当遇到方法调用时，将目标方法的方法体纳入编译范围之中，并取代原方法调用的优化...</p>
                <div class="article-item-more"><a href="/column/article/14575" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/14575">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">21 | 方法内联（下）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-07</span></div>
                <img src="https://static001.geekbang.org/resource/image/eb/37/eb20c3a62cfbeaf191ae84581a2af237.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">完全去虚化通过类型推导或者类层次分析，将虚方法调用转换为直接调用。它的关键在于证明虚方法调用的目标方法是...</p>
                <div class="article-item-more"><a href="/column/article/14652" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/14652">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">22 | HotSpot虚拟机的intrinsic</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-10</span></div>
                <img src="https://static001.geekbang.org/resource/image/08/dc/089d9a185ab3f08c3ab9b0275fccb0dc.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    HotSpot虚拟机将对标注了`@HotSpotIntrinsicCandidate`注解的方法的调用，替换为直接使用基于特定CPU指令的高效...</p>
                <div class="article-item-more"><a href="/column/article/18046" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/18046">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">23 | 逃逸分析</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-12</span></div>
                <img src="https://static001.geekbang.org/resource/image/ac/b5/ac7e23a4e5bb6d1525bb59e58e4dc1b5.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">即时编译器判断对象逃逸的依据有两个：一是看对象是否被存入堆中，二是看对象是否作为方法调用的调用者或者参数...</p>
                <div class="article-item-more"><a href="/column/article/18048" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/18048">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">24 | 字段访问相关优化</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-14</span></div>
                <img src="https://static001.geekbang.org/resource/image/31/4e/314ffe519de65d5313327d1eb5097d4e.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">即时编译器将沿着控制流缓存字段存储、读取的值，并在接下来的字段读取操作时直接使用该缓存值。</p>
                <div class="article-item-more"><a href="/column/article/39683" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/39683">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">25 | 循环优化</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-17</span></div>
                <img src="https://static001.geekbang.org/resource/image/e9/60/e905e810f4c32f5b0d2636f4bd393a60.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">循环展开是一种在循环中重复多次迭代，并且相应地减少循环次数的优化方式。</p>
                <div class="article-item-more"><a href="/column/article/39814" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/39814">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">26 | 向量化</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-19</span></div>
                <img src="https://static001.geekbang.org/resource/image/c0/0e/c06d10d8dd60e49cd15384d71b2a240e.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">向量化优化借助的是CPU的SIMD指令，即通过单条指令控制多组数据的运算。它被称为CPU指令级别的并行。</p>
                <div class="article-item-more"><a href="/column/article/39838" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/39838">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">27 | 注解处理器</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-21</span></div>
                <img src="https://static001.geekbang.org/resource/image/79/a4/79da108fb878cbf9d0d472fcc567f4a4.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">注解处理器主要有三个用途。一是定义编译规则，并检查被编译的源文件。二是修改已有源代码。三是生成新的源代码...</p>
                <div class="article-item-more"><a href="/column/article/40189" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/40189">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">28 | 基准测试框架JMH（上）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-24</span></div>
                <img src="https://static001.geekbang.org/resource/image/19/86/190ba3bca5481fbbbbbd01a22ed0b286.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    性能基准测试框架JMH是OpenJDK中的其中一个开源项目。它内置了许多功能，来规避由Java虚拟机中的即时编译器或者...</p>
                <div class="article-item-more"><a href="/column/article/40275" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/40275">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">29 | 基准测试框架JMH（下）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-26</span></div>
                <img src="https://static001.geekbang.org/resource/image/7d/09/7de621ccc2886d29ba618fd00cdf3409.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">今天我将介绍的是基准测试框架JMH的进阶功能。@Fork允许开发人员指定所要Fork出的Java虚拟机的数目。</p>
                <div class="article-item-more"><a href="/column/article/40281" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/40281">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">30 | Java虚拟机的监控及诊断工具（命令行篇）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-09-28</span></div>
                <img src="https://static001.geekbang.org/resource/image/71/34/714021ed1e7d1fe4026f7d46a833d834.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">今天，我们来一起了解一下JDK中用于监控及诊断工具。本篇中我将使用刚刚发布的Java 11版本的工具进行示范。</p>
                <div class="article-item-more"><a href="/column/article/40520" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/40520">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">31 | Java虚拟机的监控及诊断工具（GUI篇）</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-01</span></div>
                <img src="https://static001.geekbang.org/resource/image/63/9d/6385fadb955342b24fbd9f98011be59d.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">eclipse MAT可用于分析由jmap命令导出的Java堆快照。Java Mission
                    Control是Java虚拟机平台上的性能监控工具...</p>
                <div class="article-item-more"><a href="/column/article/40821" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/40821">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">32 | JNI的运行机制</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-03</span></div>
                <img src="https://static001.geekbang.org/resource/image/ce/83/ce606579058e7c27e0bf4ee97d8db683.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    Java中的native方法的链接方式主要有两种。一是按照JNI的默认规范命名所要链接的C函数，并依赖于Java虚拟机自动...</p>
                <div class="article-item-more"><a href="/column/article/40839" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/40839">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">33 | Java Agent与字节码注入</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-05</span></div>
                <img src="https://static001.geekbang.org/resource/image/ed/0d/edcb5d3dab5810f2acf4a6a4e274220d.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">我们可以通过Java
                    agent的类加载拦截功能，修改某个类所对应的byte数组，并利用这个修改过后的byte数组完成...</p>
                <div class="article-item-more"><a href="/column/article/41186" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/41186">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">34 | Graal：用Java编译Java</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-08</span></div>
                <img src="https://static001.geekbang.org/resource/image/5d/4f/5d3150591cf3ce11ea015dc0f276544f.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">GraalVM是一个高性能的、支持多种编程语言的执行环境。</p>
                <div class="article-item-more"><a href="/column/article/41245" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/41245">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">35 | Truffle：语言实现框架</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-10</span></div>
                <img src="https://static001.geekbang.org/resource/image/a8/1c/a8388be707545fcb7a875c40c37f6c1c.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    Truffle是一个语言实现框架，允许语言开发者在仅实现词法解析、语法解析以及AST解释器的情况下，达到极佳的性能</p>
                <div class="article-item-more"><a href="/column/article/41347" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/41347">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">36 | SubstrateVM：AOT编译框架</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-12</span></div>
                <img src="https://static001.geekbang.org/resource/image/10/d3/10172e007401593a5f449703918188d3.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">
                    SubstrateVM的设计初衷是提供一个高启动性能、低内存开销，和能够无缝衔接C代码的Java运行时。它是一个独立的运...</p>
                <div class="article-item-more"><a href="/column/article/41582" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/41582">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
        <div data-v-a6a58a5e="" class="article-item">
            <div class="article-item-wrapper"><h2 class="article-item-title">尾声 | 道阻且长，努力加餐</h2>
                <div class="article-item-hd"><i class="iconfont article-item-view">
                    
                </i> <span class="article-item-time">2018-10-15</span></div>
                <img src="https://static001.geekbang.org/resource/image/ef/c2/ef32b7f8161a0b2f39b2e224c56ff0c2.jpg"
                     class="article-item-cover">
                <p class="article-item-desc common-content">最后，感谢一路以来的陪伴与支持，谢谢你，我们后会有期！</p>
                <div class="article-item-more"><a href="/column/article/41800" class="article-item-more-value"
                                                  data-gk-spider-link="/column/article/41800">阅读全文</a> <i
                        class="iconfont"></i></div>
            </div> <!----></div>
    </div>
</div>
</body>
</html>